home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / Widgets / KeybWidget.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-11-16  |  19.3 KB  |  425 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import MenuWidget
  5. import ScorerWidgets
  6. import Raster
  7. import BInput
  8. import BUIx
  9. import MenuText
  10. import ListWidget
  11. import pdb
  12. import math
  13. import Raster
  14. import Bladex
  15. import acts
  16. import netwidgets
  17. AdditionalKeysCallBack = None
  18. DefInfoText = 'Press ENTER to define key, DELETE to delete bindings, ESC to exit'
  19. ActionDescriptor = {
  20.     'Attack': 'Used to kill, mutilate and destroy',
  21.     'Forwards': 'Double-tap FORWARDS to Run.',
  22.     'Backwards': 'Press FORWARDS and BACKWARDS simultaneously to turn 180 degrees.',
  23.     'Select Enemy': 'Press SELECT ENEMY to lock the movement around an enemy',
  24.     'Use': 'To pick up an object, press USE',
  25.     'Jump': 'Press JUMP while running to perform a long jump.',
  26.     'Throw': 'While holding down THROW, press ATTACK.' }
  27.  
  28. class B_ControlItemText(MenuWidget.B_MenuItemText):
  29.     
  30.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  31.         MenuWidget.B_MenuItemText.__init__(self, Parent, MenuDescr, StackMenu, font_server)
  32.         self.SetDrawFunc(self.Draw)
  33.         self.SetAlpha(1.0)
  34.         self.ChangingKey = 0
  35.         self.SelectionFilterUpdated = 0
  36.         self.FilterUpdated = 0
  37.         self.SetColor(207, 144, 49)
  38.         self._foc = -1
  39.         self.ActionName = None
  40.  
  41.     
  42.     def SetText(self, text, ActionName = None):
  43.         MenuWidget.B_MenuItemText.SetText(self, text)
  44.         self.SelectionFilterUpdated = 0
  45.         self.FilterUpdated = 0
  46.         self.ActionName = ActionName
  47.  
  48.     
  49.     def Draw(self, x, y, time):
  50.         if self.GetVisible() == 0:
  51.             return None
  52.         
  53.         foc = self.GetHasFocus()
  54.         if foc != self._foc:
  55.             self.SelectionFilterUpdated = 0
  56.             self.FilterIncX = 0
  57.             self.FilterUpdated = 0
  58.         
  59.         self._foc = foc
  60.         (w, h) = self.GetSize()
  61.         if foc:
  62.             if self.ActionName:
  63.                 if ActionDescriptor.has_key(self.ActionName):
  64.                     netwidgets.LabelName = MenuText.GetMenuText(ActionDescriptor[self.ActionName])
  65.                 else:
  66.                     netwidgets.LabelName = ' '
  67.             
  68.             if self.ChangingKey:
  69.                 mult = math.cos(time * 2)
  70.                 self.SetColor(80 * mult + 150, 80 * mult + 150, 45 * mult + 105)
  71.                 self.DefDraw(x, y, time)
  72.                 return None
  73.             elif self.SelectionFilterUpdated:
  74.                 Raster.SetPosition(x - self.FilterIncX, y - self.FilterIncY)
  75.                 Raster.DrawImage(w + 2 * self.FilterIncX, h + 2 * self.FilterIncY, 'RGB', 'Native', self.SelectionFilter.GetImageBuffer())
  76.                 self.SetColor(252, 247, 167)
  77.                 self.DefDraw(x, y, time)
  78.                 self.SetColor(207, 144, 49)
  79.                 return None
  80.             
  81.         else:
  82.             self.DefDraw(x, y, time)
  83.             return None
  84.         if foc:
  85.             self.SetColor(252, 247, 167)
  86.             self.DefDraw(x, y, time)
  87.             self.SetColor(207, 144, 49)
  88.             if self.FilterIncX > 25:
  89.                 self.SelectionFilterUpdated = 1
  90.             else:
  91.                 self.SelectionFilterUpdated = 0
  92.         
  93.  
  94.  
  95.  
  96. class B_ControlItemTexts(BUIx.B_FrameWidget, MenuWidget.B_MenuTreeItem):
  97.     
  98.     def __init__(self, Parent, MenuDescr, StackMenu):
  99.         BUIx.B_FrameWidget.__init__(self, Parent, MenuDescr['Name'], 400, 15)
  100.         MenuWidget.B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  101.         self.wActionName = B_ControlItemText(self, MenuDescr, StackMenu)
  102.         self.wActionKeys = B_ControlItemText(self, MenuDescr, StackMenu)
  103.         self.AddWidget(self.wActionName, 0, 0, BUIx.B_FrameWidget.B_FR_AbsoluteLeft, BUIx.B_FrameWidget.B_FR_Left, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  104.         self.AddWidget(self.wActionKeys, 0, 0, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  105.         self.HasFocus = 0
  106.         self.SetClipDraw(0)
  107.  
  108.     
  109.     def __del__(self):
  110.         BUIx.B_FrameWidget.__del__(self)
  111.         MenuWidget.B_MenuTreeItem.__del__(self)
  112.  
  113.     
  114.     def SetHasFocus(self, foc):
  115.         self.HasFocus = foc
  116.         self.wActionName.SetHasFocus(foc)
  117.         self.wActionKeys.SetHasFocus(foc)
  118.  
  119.     
  120.     def GetHasFocus(self, foc):
  121.         return self.HasFocus
  122.  
  123.  
  124.  
  125. class ControlMenuItem(B_ControlItemTexts):
  126.     
  127.     def __init__(self, Parent, MenuDescr, StackMenu):
  128.         B_ControlItemTexts.__init__(self, Parent, MenuDescr, StackMenu)
  129.         self.ActionName = MenuDescr['Action']
  130.         self.IManager = BInput.GetInputManager()
  131.         oldInputActionsSet = self.IManager.GetInputActionsSet()
  132.         self.IManager.SetInputActionsSet('Default')
  133.         IActions = self.IManager.GetInputActions()
  134.         self.IAction = IActions.Find(self.ActionName)
  135.         self.KeyBounded = []
  136.         self.Parent = Parent
  137.         self.Extras = MenuDescr['kFlags']
  138.         if self.IAction.Name() != 'NULL':
  139.             for i in range(self.IAction.nInputEvents()):
  140.                 IEvent = self.IAction.GetnInputEvent(i)
  141.             
  142.         else:
  143.             print 'Can\xb4t find', self.ActionName
  144.         self.BaseText = MenuDescr['Name']
  145.         self.wActionName.SetText(self.BaseText, self.ActionName)
  146.         self.wActionKeys.SetText(str(self.KeyBounded))
  147.         self.RecalcLayout()
  148.         self.IManager.SetInputActionsSet(oldInputActionsSet)
  149.         self.ListenerName = MenuDescr['Name'] + ' Listener'
  150.         self.Listener = BInput.B_InputListener(self.ListenerName)
  151.         self.Listener.SetPythonFunc(self.ListenDevice)
  152.         self.MouseListenerName = MenuDescr['Name'] + ' MouseListener'
  153.         self.MouseListener = BInput.B_InputListener(self.MouseListenerName)
  154.         self.MouseListener.SetPythonFunc(self.ListenMouseDevice)
  155.         self.PadListenerName = MenuDescr['Name'] + ' PadListener'
  156.         self.PadListener = BInput.B_InputListener(self.PadListenerName)
  157.         self.PadListener.SetPythonFunc(self.ListenPadDevice)
  158.         self.ReadyToEscape = 1
  159.  
  160.     
  161.     def ActivateItem(self, act):
  162.         if not act:
  163.             if self.ReadyToEscape:
  164.                 B_ControlItemTexts.ActivateItem(self, act)
  165.             
  166.             self.ReadyToEscape = 1
  167.             return None
  168.         
  169.         if len(self.KeyBounded) >= 3:
  170.             self.SetStatusText(MenuText.GetMenuText('Maximun number of key bindings reached.'))
  171.             return None
  172.         
  173.         self.SetStatusText(MenuText.GetMenuText('Press desired key, ESC to end'))
  174.         keyb = self.IManager.GetAttachedDevice('Keyboard')
  175.         if keyb.this != 'NULL':
  176.             keyb.AddListener(self.Listener)
  177.         
  178.         keyb = self.IManager.GetAttachedDevice('Mouse')
  179.         if keyb.this != 'NULL':
  180.             keyb.AddListener(self.MouseListener)
  181.         
  182.         keyb = self.IManager.GetAttachedDevice('Pad')
  183.         if keyb.this != 'NULL':
  184.             keyb.AddListener(self.PadListener)
  185.         
  186.         self.oldInputActionsSet = self.IManager.GetInputActionsSet()
  187.         self.IManager.SetInputActionsSet('MenuRedefine')
  188.         self.wActionName.ChangingKey = 1
  189.         self.wActionKeys.ChangingKey = 1
  190.  
  191.     
  192.     def EndDefineKey(self):
  193.         self.SetStatusText(MenuText.GetMenuText(DefInfoText))
  194.         self.IManager.SetInputActionsSet(self.oldInputActionsSet)
  195.         keyb = self.IManager.GetAttachedDevice('Keyboard')
  196.         if keyb.this != 'NULL':
  197.             keyb.RemoveListener(self.ListenerName)
  198.         
  199.         keyb = self.IManager.GetAttachedDevice('Mouse')
  200.         if keyb.this != 'NULL':
  201.             keyb.RemoveListener(self.MouseListenerName)
  202.         
  203.         keyb = self.IManager.GetAttachedDevice('Pad')
  204.         if keyb.this != 'NULL':
  205.             keyb.RemoveListener(self.PadListenerName)
  206.         
  207.         self.wActionName.ChangingKey = 0
  208.         self.wActionName.SelectionFilterUpdated = 0
  209.         self.wActionName.FilterUpdated = 0
  210.         self.wActionKeys.ChangingKey = 0
  211.         self.wActionKeys.SelectionFilterUpdated = 0
  212.         self.wActionKeys.FilterUpdated = 0
  213.  
  214.     
  215.     def ListenDevice(self, x, y, z):
  216.         if z == 1.0:
  217.             if x == 'Esc':
  218.                 self.EndDefineKey()
  219.                 self.ReadyToEscape = 0
  220.             elif x not in self.KeyBounded:
  221.                 if x == 'Delete':
  222.                     self.ReadyToEscape = 0
  223.                 
  224.                 keyb = self.IManager.GetAttachedDevice('Keyboard')
  225.                 self.IManager.SetInputActionsSet('Default')
  226.                 if keyb.IsBinded(x):
  227.                     self.SetStatusText(MenuText.GetMenuText('The key <') + x + MenuText.GetMenuText('> is already used!'))
  228.                 elif len(self.KeyBounded) >= 3:
  229.                     self.SetStatusText(MenuText.GetMenuText('You already have 3 keys assigned to that action'))
  230.                 else:
  231.                     self.IAction.AddEvent(keyb, x, 1)
  232.                     for k in self.Extras:
  233.                         if k[0] == 'Press':
  234.                             self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 1)
  235.                         elif k[0] == 'Release':
  236.                             self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 0)
  237.                         else:
  238.                             print "ERROR : '", k[0], "' is not defined yet!"
  239.                     
  240.                     self.KeyBounded.append(x)
  241.                     self.IManager.SetInputActionsSet('MenuRedefine')
  242.                     self.wActionKeys.SetText(str(self.KeyBounded))
  243.                     self.RecalcLayout()
  244.                     self.EndDefineKey()
  245.             
  246.         
  247.  
  248.     
  249.     def ListenMouseDevice(self, x, y, z):
  250.         if x != 'X_Axis' and x != 'Y_Axis' and x != 'Z_Axis':
  251.             if x not in self.KeyBounded:
  252.                 keyb = self.IManager.GetAttachedDevice('Mouse')
  253.                 self.IManager.SetInputActionsSet('Default')
  254.                 if keyb.IsBinded(x) or len(self.KeyBounded) >= 3:
  255.                     self.SetStatusText(MenuText.GetMenuText('The mouse action <') + x + MenuText.GetMenuText('> is already used!'))
  256.                 else:
  257.                     self.IAction.AddEvent(keyb, x, 1)
  258.                     for k in self.Extras:
  259.                         if k[0] == 'Press':
  260.                             self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 1)
  261.                         elif k[0] == 'Release':
  262.                             self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 0)
  263.                         else:
  264.                             print "ERROR : '", k[0], "' is not defined yet!"
  265.                     
  266.                     self.KeyBounded.append(x)
  267.                     self.IManager.SetInputActionsSet('MenuRedefine')
  268.                     self.wActionKeys.SetText(str(self.KeyBounded))
  269.                     self.RecalcLayout()
  270.                     self.EndDefineKey()
  271.             
  272.         
  273.  
  274.     
  275.     def ListenPadDevice(self, x, y, z):
  276.         if x not in self.KeyBounded:
  277.             keyb = self.IManager.GetAttachedDevice('Pad')
  278.             self.IManager.SetInputActionsSet('Default')
  279.             if keyb.IsBinded(x) or len(self.KeyBounded) >= 3:
  280.                 self.SetStatusText(MenuText.GetMenuText('The pad action <') + x + MenuText.GetMenuText('> is already used!'))
  281.             else:
  282.                 self.IAction.AddEvent(keyb, x, 1)
  283.                 for k in self.Extras:
  284.                     if k[0] == 'Press':
  285.                         self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 1)
  286.                     elif k[0] == 'Release':
  287.                         self.IManager.GetInputActions().Find(k[1]).AddEvent(keyb, x, 0)
  288.                     else:
  289.                         print "ERROR : '", k[0], "' is not defined yet!"
  290.                 
  291.                 self.KeyBounded.append(x)
  292.                 self.IManager.SetInputActionsSet('MenuRedefine')
  293.                 self.wActionKeys.SetText(str(self.KeyBounded))
  294.                 self.RecalcLayout()
  295.                 self.EndDefineKey()
  296.         
  297.  
  298.     
  299.     def SuprMenuItem(self):
  300.         if self.ReadyToEscape:
  301.             self.IManager.SetInputActionsSet('Default')
  302.             self.IAction.RemoveAllEvents()
  303.             for k in self.Extras:
  304.                 if k[0] == 'Press':
  305.                     self.IManager.GetInputActions().Find(k[1]).RemoveAllEvents()
  306.                 elif k[0] == 'Release':
  307.                     self.IManager.GetInputActions().Find(k[1]).RemoveAllEvents()
  308.                 else:
  309.                     print "ERROR : '", k[0], "' is not defined yet!"
  310.             
  311.             self.KeyBounded = []
  312.             self.wActionKeys.SetText('')
  313.             self.wActionKeys.SelectionFilterUpdated = 0
  314.             self.wActionKeys.FilterUpdated = 0
  315.             self.RecalcLayout()
  316.             self.IManager.SetInputActionsSet('Menu')
  317.         
  318.         self.ReadyToEscape = 1
  319.  
  320.     
  321.     def SetStatusText(self, text):
  322.         self.Parent.SetStatusText(text)
  323.  
  324.     
  325.     def FinalRelease(self):
  326.         self.Parent = None
  327.  
  328.  
  329. MOUSE_CONTROLS = [
  330.     'RightButton',
  331.     'LeftButton',
  332.     'MiddleButton',
  333.     'OtherButton']
  334.  
  335. class B_KeybListWidget(ListWidget.B_ListWidget):
  336.     
  337.     def __init__(self, Parent, Menudesc, StackMenu, VertPos = 0):
  338.         ListWidget.B_ListWidget.__init__(self, Parent, Menudesc, StackMenu, VertPos)
  339.         self.StatusText = BUIx.B_TextWidget(self, 'Status', MenuText.GetMenuText(DefInfoText), ScorerWidgets.font_server, '..\\..\\Data\\Letras menu peq.bmp')
  340.         self.StatusText.SetColor(252, 247, 167)
  341.         self.StatusText.SetAlpha(1)
  342.         self.AddLabel(self.StatusText, 0.5, 25, BUIx.B_Widget.B_LAB_HCenter, BUIx.B_Widget.B_LAB_Bottom, BUIx.B_Widget.B_FR_HRelative, BUIx.B_Widget.B_LAB_HCenter, BUIx.B_Widget.B_FR_AbsoluteTop, BUIx.B_Widget.B_FR_Top)
  343.         self.DownArrow.SetAlpha(1)
  344.         self.SetClipDraw(1)
  345.         self.SetDrawFunc(self.Draw)
  346.  
  347.     
  348.     def __del__(self):
  349.         SaveListConfig()
  350.         if AdditionalKeysCallBack:
  351.             AdditionalKeysCallBack()
  352.         
  353.         ListWidget.B_ListWidget.__del__(self)
  354.  
  355.     
  356.     def Draw(self, x, y, time):
  357.         self.SetClipDraw(1)
  358.         self.DefDraw(x, y, time)
  359.  
  360.     
  361.     def SetStatusText(self, text):
  362.         self.StatusText.SetText(text)
  363.         self.RecalcLabelLayout(BUIx.B_Widget.B_LAB_HCenter, BUIx.B_Widget.B_LAB_Bottom)
  364.  
  365.     
  366.     def FinalRelease(self):
  367.         ListWidget.B_ListWidget.FinalRelease(self)
  368.  
  369.  
  370.  
  371. def SaveReleaseKey(cfgfile, Action, key, adaction, device):
  372.     text = 'Bladex.AssocKey("%s","%s","%s",ON_RELEASE)\n' % (adaction, device, key)
  373.     cfgfile.write(text)
  374.  
  375.  
  376. def NewAction(cfgfile, Action, key, adaction, device):
  377.     text = 'Bladex.AssocKey("%s","%s","%s")\n' % (adaction, device, key)
  378.     cfgfile.write(text)
  379.  
  380.  
  381. def SaveListConfig():
  382.     cfgfile = open('../../Config/Control.py', 'w')
  383.     cfgfile.write('\n\n# File generated automatically\n')
  384.     cfgfile.write('# DO NOT EDIT: Changes will be lost\n\n\n')
  385.     cfgfile.write('ON_RELEASE=0\n')
  386.     cfgfile.write('ON_PRESS=1\t# default\n\n\n\n')
  387.     cfgfile.write('import BInput\n')
  388.     cfgfile.write('InputManager=BInput.GetInputManager()\n')
  389.     cfgfile.write('InputManager.SetInputActionsSet("Default")  # Me aseguro de definir las acciones en el grupo correcto\n\n\n')
  390.     IManager = BInput.GetInputManager()
  391.     oldInputActionsSet = IManager.GetInputActionsSet()
  392.     IManager.SetInputActionsSet('Default')
  393.     IActions = IManager.GetInputActions()
  394.     for i in acts.ConfigurableActions:
  395.         IAction = IActions.Find(i[1])
  396.         if IAction.Name() == 'NULL':
  397.             print 'Can\xb4t find', self.ActionName
  398.             continue
  399.         
  400.         for j in range(IAction.nInputEvents()):
  401.             IEvent = IAction.GetnInputEvent(j)
  402.             IDevice = IEvent.GetDevice()
  403.             if IDevice == 'Keyboard' and IDevice == 'Mouse' or IDevice == 'Pad':
  404.                 text = 'Bladex.AssocKey("%s","%s","%s")\n' % (IAction.Name(), IDevice, IEvent.GetKey())
  405.                 cfgfile.write(text)
  406.                 for k in i[2]:
  407.                     if k[0] == 'Release':
  408.                         SaveReleaseKey(cfgfile, IAction.Name(), IEvent.GetKey(), k[1], IDevice)
  409.                     elif k[0] == 'Press':
  410.                         NewAction(cfgfile, IAction.Name(), IEvent.GetKey(), k[1], IDevice)
  411.                     else:
  412.                         print "ERROR: '" + k[0] + ' is not defined!'
  413.                 
  414.             
  415.         
  416.     
  417.     IManager.SetInputActionsSet(oldInputActionsSet)
  418.     cfgfile.write('\n# Mouse stuff\nBladex.AssocKey("RotateX","Mouse","X_Axis")\nBladex.AssocKey("RotateY","Mouse","Y_Axis")\n')
  419.     MouseData = Bladex.GetMouseState()
  420.     text = 'Bladex.SetMouseState(%i,%f,%f)\n' % (MouseData[0], MouseData[1], MouseData[2])
  421.     cfgfile.write(text)
  422.     cfgfile.write('\n# Have a nice day.\n\n\n')
  423.     cfgfile.close()
  424.  
  425.